#pragma once

#include <set>
#include "memory_allocator.hpp"
#include "ned_pool.hpp"

namespace cpac
{

	// Custom set template.
	//--------------------------------------
	// Usage is cpac::set<int>::type int_set;
	// This container specifies a default allocator for us, but we could of course
	// pass it another one if we need to.
	template
		< 
			typename _Type, 
			class    _Compare = std::less< _Type >, 
            typename _Allocator = cpac::allocator_stl< _Type, cpac::ned_pooling_policy > 
		> 
	struct set 
	{
		typedef std::set< _Type, _Compare, _Allocator > type;
	};
	//--------------------------------------

	// Custom multiset template.
	//--------------------------------------
	// Usage is cpac::multiset<int>::type int_multiset;
	// This container specifies a default allocator for us, but we could of course
	// pass it another one if we need to.
	template
		< 
			typename _Type, 
			class    _Compare = std::less< _Type>, 
            typename _Allocator = cpac::allocator_stl< Type, cpac::ned_pooling_policy > 
		> 
	struct multiset 
	{
		typedef std::multiset< _Type, _Compare, _Allocator > type;
	};
	//--------------------------------------
}
